import Util from "./js/util.js";
import SystemDemo, {get_sheet_by_name} from "./js/systemdemo.js";
import {
    中压缸效率,
    不明漏量,
    给水,
    高压主蒸汽,
    有调节级,
    调节级,
    抽汽1,
    init_turbine,
    高压缸排汽,
    再热蒸汽,
    抽汽4,
    抽汽5,
    抽汽6,
    抽汽7,
    热耗率,
    低压缸,
    抽汽8,
    抽汽9,
    fill_data_from_origin,
    correct_gas_turbine,
} from "./js/calculate";
import {初始化抽汽信息} from "./js/settings";
import eu from "./js/enum";
import lodash from "lodash";
import {modifyExtract2, 抽汽2} from "@/components/js/抽汽2";
import {modify高压缸效率, 高压缸效率} from "@/components/js/高压缸效率";
import {抽汽3} from "@/components/js/抽汽3";
import {漏汽} from "@/components/js/漏汽";
import {loadAddonMgr} from "../loadwpsaddonmgr"


let app = wps.EtApplication();


function onCellChange(e, e1) {
    /**
     * 当任意单元格内容发生变换时，触发该事件
     */
    console.log("SheetChange");
    if (e.Name !== "汽机") { // 只监视汽机工作簿中的单元格数据改变
        return
    }
    // 获取数据改变的单元格，因为单元格改变后，
    let cell = wps.ActiveCell;
    let type = cell.Validation.Type; //
    if (type !== 3) { // 如果单元格不是下拉列表，就返回
        return
    }

    let new_value = cell.Value2.toString();
    let msg = JSON.parse(cell.Validation.InputMessage.toString());
    let old_value = msg["value"]
    let id = msg["id"]
    msg["value"] = new_value;
    cell.Validation.InputMessage = JSON.stringify(msg)
    if (new_value === old_value) {
        return
    }

    if (id === 1) {
        // modifyExtract2(cell)
        modify高压缸效率(cell, old_value)
    }

    console.log(e);
    console.log(e1);
}

function onSelectionChange(e, e1) {
    /** 当用户选择的单元格变化时，触发该事件
     *
     */
}

//这个函数在整个wps加载项中是第一个执行的
function OnAddinLoad(ribbonUI) {
    if (typeof wps.ribbonUI != "object") {
        wps.ribbonUI = ribbonUI;
    }

    if (typeof wps.Enum != "object") {
        // 如果没有内置枚举值
        wps.Enum = Util.WPS_Enum;
    }

    //这几个导出函数是给外部业务系统调用的
    window.openOfficeFileFromSystemDemo = SystemDemo.openOfficeFileFromSystemDemo;
    window.InvokeFromSystemDemo = SystemDemo.InvokeFromSystemDemo;

    wps.PluginStorage.setItem("EnableFlag", true); //往PluginStorage中设置一个标记，用于控制两个按钮的置灰
    wps.PluginStorage.setItem("ApiEventFlag", true); //往PluginStorage中设置一个标记，用于控制ApiEvent的按钮label
    wps.PluginStorage.setItem("progress", 0);
    wps.PluginStorage.setItem("task_name", null);
    wps.PluginStorage.setItem("heater_order", null) // 加热器顺序，1为正常顺序，2、3、4均为倒序，参考calculate.init_turbine()
    wps.PluginStorage.setItem("group_type", null)  // 机组类型，可分为燃煤机组、联合循环

    wps.PluginStorage.setItem("高压缸抽汽", null) // 高压缸上的抽汽级数，取值为"[1]"等
    wps.PluginStorage.setItem("中压缸抽汽", null) // 中压缸上的抽汽级数，取值为"[3,4]"等
    wps.PluginStorage.setItem("低压缸抽汽", null) // 高压缸上的抽汽级数，取值为"[6,7,8,9]"等
    wps.PluginStorage.setItem("高排抽汽", null) // 高排管道上的抽汽级数，取值为[2]等
    wps.PluginStorage.setItem("中排抽汽", null) // 中排管道上的抽汽级数，取值为[5]等

    wps.PluginStorage.setItem("高加级数", null) // 机组中存在的高加级数，[1,2,3]
    wps.PluginStorage.setItem("低加级数", null) // 机组中存在的低加级数，[5,6,7,8,9]

    wps.PluginStorage.setItem("sheet_columns", null)

    wps.ApiEvent.AddApiEventListener("SheetChange", onCellChange)
    wps.ApiEvent.AddApiEventListener("SheetSelectionChange", onSelectionChange)
    return true;
}


function _init_(sheet = "汽机") {
    /**
     * 初始化工作表，确保存在“数据整理”和“汽机”这两个sheet。且将当前激活的sheet切换至“汽机”，同时，扫描“数据整理”sheet中的测点信息，并记录。
     * 如果不存在“数据整理”sheet，则会提示错误，如果不存在“汽机”sheet，则会自动创建。
     *
     * @type {Et.EtWorkbook}
     */
    let doc = wps.EtApplication().ActiveWorkbook;
    if (!doc) {
        alert("当前没有打开任何文档");
        return;
    }
    // console.log(Application)
    if (!SystemDemo.createTurbineSheet("汽机")) {
        return false;
    }
    SystemDemo.activate_sheet("汽机");
    SystemDemo.refreshTestPoints();
}

var WebNotifycount = 0;

function installWpsAddin(callBack) {

    // WpsAddonMgr.getAllConfig(function (e) {
    //     if (!e.response || e.response.indexOf("null") >= 0) {//本地没有加载项，直接安装
    //         if (curList.length > 0) {
    //             installWpsAddinOne(callBack);
    //         }
    //     } else {//本地有加载项，先卸载原有加载项，然后再安装
    //         let localList = JSON.parse(e.response)
    //         unInstallWpsAddinOne(callBack)
    //     }
    // })
}


function OnAction(control) {
    // 在ribbon.xml中定义了触发该方法的按钮或标签
    const eleId = control.Id;
    switch (eleId) {
        case "calculate_turbine": {
            _init_("汽机");  // 确保存在“数据整理”，创建”汽机“工作簿，并激活”汽机“工作簿
            let row = SystemDemo.getLastRowIndexOfSheet();
            // wps.ShowDialog(
            //   Util.GetUrlPath() + "progress",
            //   // "www.baidu.com",
            //   "努力计算中",
            //   500 * window.devicePixelRatio,
            //   100 * window.devicePixelRatio,
            //   true,
            //   true
            // );
            init_turbine();
            漏汽(SystemDemo.getLastRowIndexOfSheet());
            不明漏量(SystemDemo.getLastRowIndexOfSheet());
            高压缸效率(SystemDemo.getLastRowIndexOfSheet());
            中压缸效率(SystemDemo.getLastRowIndexOfSheet());
            给水(SystemDemo.getLastRowIndexOfSheet());
            高压主蒸汽(SystemDemo.getLastRowIndexOfSheet());
            if (有调节级()) {
                调节级(SystemDemo.getLastRowIndexOfSheet());
            }
            抽汽1(SystemDemo.getLastRowIndexOfSheet());
            抽汽2(SystemDemo.getLastRowIndexOfSheet());
            抽汽3(SystemDemo.getLastRowIndexOfSheet());
            抽汽4(SystemDemo.getLastRowIndexOfSheet());
            高压缸排汽(SystemDemo.getLastRowIndexOfSheet());
            再热蒸汽(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            app.Goto(app.ActiveSheet.Cells.Item(row + 2, 1), true);
        }
            break;
        case "1_漏汽": {
            _init_("汽机");
            init_turbine();
            漏汽(SystemDemo.getLastRowIndexOfSheet());
            不明漏量(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            break;
        }
        case "2_缸效率":
            SystemDemo.activate_sheet("汽机");
            高压缸效率(SystemDemo.getLastRowIndexOfSheet());
            中压缸效率(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            break;
        case "3_给水及主汽":
            SystemDemo.activate_sheet("汽机");
            给水(SystemDemo.getLastRowIndexOfSheet());
            高压主蒸汽(SystemDemo.getLastRowIndexOfSheet());
            if (有调节级()) {
                调节级(SystemDemo.getLastRowIndexOfSheet());
            }
            app.Columns.AutoFit();
            break;
        case "4_抽汽":
            SystemDemo.activate_sheet("汽机");
            抽汽1(SystemDemo.getLastRowIndexOfSheet());
            抽汽2(SystemDemo.getLastRowIndexOfSheet());
            抽汽3(SystemDemo.getLastRowIndexOfSheet());
            抽汽4(SystemDemo.getLastRowIndexOfSheet());
            抽汽5(SystemDemo.getLastRowIndexOfSheet());
            抽汽6(SystemDemo.getLastRowIndexOfSheet());
            抽汽7(SystemDemo.getLastRowIndexOfSheet());
            抽汽8(SystemDemo.getLastRowIndexOfSheet());
            抽汽9(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            break;
        case "5_高压缸级":
            SystemDemo.activate_sheet("汽机");
            高压缸排汽(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            break;
        case "6_中压缸级":
            SystemDemo.activate_sheet("汽机");
            再热蒸汽(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            break;
        case "7_低压缸及湿蒸汽抽汽":
            SystemDemo.activate_sheet("汽机");
            低压缸(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            break;
        case "8_热耗率":
            SystemDemo.activate_sheet("汽机");
            热耗率(SystemDemo.getLastRowIndexOfSheet());
            app.Columns.AutoFit();
            break;
        case "btnShowDialog":
            wps.ShowDialog("")
            break;
        case "btnShowTaskPane":
            SystemDemo.showTaskPane("DemoTaskPane", "示例任务栏");
            break;
        case "btnApiEvent": {
            let bFlag = wps.PluginStorage.getItem("ApiEventFlag");
            let bRegister = bFlag ? false : true;
            wps.PluginStorage.setItem("ApiEventFlag", bRegister);
            if (bRegister) {
                wps.ApiEvent.AddApiEventListener(
                    "NewWorkbook",
                    "ribbon.OnNewDocumentApiEvent"
                );
            } else {
                wps.ApiEvent.RemoveApiEventListener(
                    "NewWorkbook",
                    "ribbon.OnNewDocumentApiEvent"
                );
            }

            wps.ribbonUI.InvalidateControl("btnApiEvent");
        }
            break;
        case "btnWebNotify": {
            let currentTime = new Date();
            let timeStr =
                currentTime.getHours() +
                ":" +
                currentTime.getMinutes() +
                ":" +
                currentTime.getSeconds();
            wps.OAAssist.WebNotify(
                "这行内容由wps加载项主动送达给业务系统，可以任意自定义, 比如时间值:" +
                timeStr +
                "，次数：" +
                ++WebNotifycount,
                true
            );
        }
            break;
        case "热力系统设置":
            SystemDemo.showTaskPane("settings", "设置");
            break;
        case "链接测点":
            // 在试验数据或原始数据中查询当前参数的数据所在位置，并链接
            fill_data_from_origin()
            break;
        case "联合循环修正":
            correct_gas_turbine()
            break;
        case "刷新":
            console.log("刷新RibbonUI");
            wps.UpdateRibbon();
            installWpsAddin(null)

            var element = {
                "name": "WpsOAAssist",
                "addonType": "wps",
                "online": "true",
                "url": "http://127.0.0.1:3888/plugin/wps/"
            }

            console.log(window.WpsAddonMgr)
            // console.log(WpsAddonMgr);
            console.log(window.WpsAddonMgr.disable)

            WpsAddonMgr.disable(element, function (result) {
                if (result.status) {
                    console.log(result.msg)
                } else {
                    console.log("卸载成功")
                }
            })

            WpsAddonMgr.enable(element, function (result) {
                if (result.status) {
                    console.log(result.msg)
                } else {
                    console.log("安装成功")
                }
            })
            break;
        default:
            break;
    }
    return true;
}

function GetImage(control) {
    const eleId = control.Id;
    switch (eleId) {
        case "calculate_turbine":
            return "images/Ebsilon_turbine.png"
        case "btnShowMsg":
            return "images/1.svg";
        case "btnShowDialog":
            return "images/2.svg";
        case "btnShowTaskPane":
            return "images/2.svg";
        case "链接测点":
            //     在试验数据或原始数据中查询当前参数的数据所在位置，并链接
            return "images/R-C.jpg"
        case "热力系统设置":
            return "images/extract.png"
        case "联合循环修正":
            return "images/correct.png"
        case "刷新":
            return "images/refresh.png"
        default:
    }
    return "images/newFromTemp.svg";
}

function OnGetEnabled(control) {
    const eleId = control.Id;
    switch (eleId) {
        case "btnShowMsg":
            return true;
        case "btnShowDialog": {
            let bFlag = wps.PluginStorage.getItem("EnableFlag");
            return bFlag;
        }
        case "btnShowTaskPane": {
            let bFlag = wps.PluginStorage.getItem("EnableFlag");
            return bFlag;
        }
        default:
            break;
    }
    return true;
}

function OnGetVisible(control) {
    const eleId = control.Id;
    console.log(eleId);
    return true;
}

function OnGetLabel(control) {
    const eleId = control.Id;
    switch (eleId) {
        case "btnIsEnbable": {
            let bFlag = wps.PluginStorage.getItem("EnableFlag");
            return bFlag ? "按钮Disable" : "按钮Enable";
        }
        case "btnApiEvent": {
            let bFlag = wps.PluginStorage.getItem("ApiEventFlag");
            return bFlag ? "清除新建文件事件" : "注册新建文件事件";
        }
    }
    return "";
}

function OnNewDocumentApiEvent(doc) {
    alert("新建文件事件响应，取文件名: " + doc.Name);
}

loadAddonMgr()  // 加载wps插件管理器，使用后，才可以使用WpsAddonMgr对象

//这些函数是给wps客户端调用的
export default {
    OnAddinLoad,
    OnAction,
    GetImage,
    OnGetEnabled,
    OnGetVisible,
    OnGetLabel,
    OnNewDocumentApiEvent,
    // showTaskPane,
};
